iT邦幫忙

2023 iThome 鐵人賽

DAY 30
0
Software Development

ASP.NET MVC基礎修練:從菜開始系列 第 30

Day-30 ASP.NET MVC 之 GridView 匯出Excel

  • 分享至 

  • xImage
  •  

Excel 匯出是很多系統都會用到的 這裡簡單分享一下

要先安裝EPPlus 套件

https://ithelp.ithome.com.tw/upload/images/20231015/20106640qarUecfwVg.jpg

前端加一個按鈕用來匯出Excel

程式如下:

 @Html.ActionLink("匯出Excel", "ExportToExcel", "Employee", new { }, new { @class = "btn btn-primary" })

Controller 程式如下

下面這是呼叫資料用

 public List<Employee> GetEmployeeDataFromDatabase()
        {
            string sql = $" Select *  From Employee    ";

            DBHelper db = new DBHelper();

            SqlDataReader sqlDataReader = db.GetSqlDataReader(sql);

            List<Employee> Employee = new List<Employee>();

            while (sqlDataReader.Read())
            {
                Employee.Add(new Employee
                {
                  
                    LoginID = sqlDataReader.GetString(0),
                    Username = sqlDataReader.GetString(1),
                    Gender = sqlDataReader.GetString(2),
                    PhoneNumber = sqlDataReader.GetString(3)

                });
            }
           sqlDataReader.Close();

            return Employee;

        }

下面是產生 Excel 用

  public ActionResult ExportToExcel()
        {
            ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
            ExcelPackage excel = new ExcelPackage();
            var workSheet = excel.Workbook.Worksheets.Add("EmployeeData");

            var employees = GetEmployeeDataFromDatabase();

            var headerRow = workSheet.Cells["A1"].LoadFromCollection(employees, true);

          
            var idColumn = employees.FirstOrDefault()?.GetType().GetProperties()
     .FirstOrDefault(p => p.Name.Equals("id", StringComparison.OrdinalIgnoreCase));

            if (idColumn != null)
            {
                var columnIndex = workSheet.Cells[1, 1, 1, workSheet.Dimension.End.Column]
                    .FirstOrDefault(cell => cell.Text == idColumn.Name);

                if (columnIndex != null)
                {
                    int columnNumber = columnIndex.Start.Column;
                    workSheet.DeleteColumn(columnNumber, columnNumber);
                }
            }
         
            workSheet.Cells["A1"].Value = "帳號";
            workSheet.Cells["B1"].Value = "使用者名稱";
            workSheet.Cells["C1"].Value = "性別";
            workSheet.Cells["D1"].Value = "電話號碼";

            byte[] excelBytes = excel.GetAsByteArray();

            return File(excelBytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "EmployeeData.xlsx");
        }

簡單說明ExportToExcel的程式
ExcelPackage.LicenseContext = LicenseContext.NonCommercial; -
這一行程式碼設定了EPPlus庫的許可上下文,以確保你遵循其非商業使用許可。

ExcelPackage excel = new ExcelPackage(); -
這一行建立一個新的ExcelPackage對象,它代表了一個Excel頁籤。

var workSheet = excel.Workbook.Worksheets.Add("EmployeeData");

  • 這行程式碼在工作表中新增了一個名為"EmployeeData"的工作表。

var employees = GetEmployeeDataFromDatabase(); -
這行呼叫GetEmployeeDataFromDatabase函數,取得員工資料。 需要實作這個函數以從資料庫中檢索員工資訊。

var headerRow = workSheet.Cells["A1"].LoadFromCollection(employees, true); -
這一行載入員工資料到工作表中,
並LoadFromCollection函數的第二個參數true表示第一行用於表頭。

workSheet.Cells["A1"].Value = "帳號"; - 這些行用來設定Excel工作表的欄位標題。
在這裡,"A1"表示工作表的第一個儲存格。

byte[] excelBytes = excel.GetAsByteArray(); -
這一行將工作簿轉換為Excel檔案的位元組陣列。

執行畫面如下
https://ithelp.ithome.com.tw/upload/images/20231015/20106640vvePgpyZ1y.jpg

https://ithelp.ithome.com.tw/upload/images/20231015/20106640pCkBYYf06c.jpg


上一篇
Day-29 ASP.NET MVC 之 GridView 查詢與複選框checkbox
系列文
ASP.NET MVC基礎修練:從菜開始30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言